const {src, dest, watch, series, parallel} = require('gulp')
const concat = require("gulp-concat")
const uglify = require("gulp-uglify")
const rename = require('gulp-rename')
const babel = require("gulp-babel")
const connect = require("gulp-connect")
const {createProxyMiddleware} = require("http-proxy-middleware")

// 定义gulp命令：利用node的自定义模块的规范
exports.hello = function(a){
    // 测试gulp是否可以使用
    var str = "hello gulp"
    for(var i=0;i<str.length;i++){
        console.log(str[i])
    }
    // return 文件流
    a();
}



// function copyFn(){
//     return src("./src/index.html").pipe(dest("./dest"))
// }
// exports.copy = copyFn


exports.listen = function(a){
    watch(["./src/index.html"],copyFn)
    a();
}

function fn1(a){
    console.log(1)
    a()
}
function fn2(a){
    console.log(2)
    a()
}
function fn3(a){
    console.log(3)
    a()
}
// 同步批量执行
// exports.all = series([fn1,fn2,fn3]);
// 异步批量执行
// exports.all = parallel([fn1,fn2,fn3]);


// 合并js文件的功能
exports.concat = function(){
    // return src(["./src/js/a.js","./src/js/b.js"])
    return src("./src/js/*")
            .pipe(concat("index.js"))
            .pipe(dest("./dest/js"))
}

// 压缩js文件的功能
// exports.min = function(){
//     return src("./src/js/*")
//     .pipe(concat("index.js"))
//     .pipe(uglify())
//     .pipe(dest("./dest/js"))
// }

// 改名功能
// exports.min = function(){
//     return src("./src/js/*")
//     // 合并文件
//     .pipe(concat("index.js"))
//     // 转存文件
//     .pipe(dest("./dest/js"))
//     // 压缩文件
//     .pipe(uglify())
//     // 改名文件
//     .pipe(rename("index.min.js"))
//     // 转存文件
//     .pipe(dest("./dest/js"))
// }

// ES6转ES5
exports.stf = function(){
    return src("./src/js/*")
            .pipe(babel({
                presets: ['@babel/env']
            }))
            .pipe(dest("./dest/js-5"))
}


// 合并编译压缩改名转存
exports.min = function(){
    return src("./src/js/*")
    // 合并文件
    .pipe(concat("index.js"))
    // ES6转ES5
    .pipe(babel({
        presets: ['@babel/env']
    }))
    // 转存文件
    .pipe(dest("./dest/js"))
    // 压缩文件
    .pipe(uglify())
    // 改名文件
    .pipe(rename("index.min.js"))
    // 转存文件
    .pipe(dest("./dest/js"))
}


// 开启服务器
// exports.server = function(a){
//     connect.server({
//         root: 'dest',
//         port: 3006,
//         livereload: true
//     });
//     a();
// }

function serverFn(a){
    connect.server({
        root: 'dest',
        port: 3006,
        livereload: true,
        middleware: function(connect, opt) {
            return [
                createProxyMiddleware('/api', {
                    target: 'https://wanandroid.com/wxarticle',
                    changeOrigin:true,
                    pathRewrite:{    //路径重写规则
                        '^/api':''
                    }
                })
            ]
        }
    });
    a();
}
function copyFn(){
    return src("./src/index.html").pipe(dest("./dest")).pipe(connect.reload())
}
function watchFn(a){
    watch("./src/index.html",copyFn)
    a();
}
exports.all = series([watchFn, serverFn])